package main

import (
	"fmt"
	"unsafe"
)

func main() {
	//整形分为 有符号整型｜对应的无符号整型
	/*
		有符号：
		 int8    -128～127        占一个字节
		 int16   -32768～32767    占两个字节
		 int32                    占四个字节
		 int64                    占八个字节
	*/
	/*  无符号：
	    uint8   0~255            占一个字节
	    uint16
	    uint32
	    uint64                   占八个字节
	*/
	var num int8 = 12
	fmt.Printf("num=%v 类型是%T\n", num, num) //num=100 类型是int
	//unsafe.Sizeof() 查看变量占用字符数
	fmt.Println(unsafe.Sizeof(num)) // 1 占一个字节

	// int 不同长度转换
	var a1 int32 = 10
	var a2 int64 = 21
	fmt.Println(int64(a1) + a2) //不同类型需要转换成同一类型加

	//高位转地位 可能有问题
	var n1 int16 = 200
	fmt.Println(int8(n1)) // -56  出现问题

	// %d表示10进制输出  %b表示二进制输出 %o八进制输出 %x表示16进制

	num1 := 40
	fmt.Printf("n1=%v 类型：%T\n", num1, num1)
	fmt.Println(unsafe.Sizeof(num1)) // 8
	fmt.Printf("num=%v\n", num1)     //原样输出
	fmt.Printf("num=%o\n", num1)     //50
	fmt.Printf("num=%d\n", num1)     //40
	fmt.Printf("num=%x\n", num1)     //28
}
